
<!DOCTYPE HTML>
<html lang="" >
    <head>
        <meta charset="UTF-8">
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <title>Java 基础 -- 反射 · 寒江蓑笠的博客</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="description" content="">
        <meta name="generator" content="GitBook 3.2.3">
        
        
        
    
    <link rel="stylesheet" href="../../gitbook/style.css">

    
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-highlight/website.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-search/search.css">
                
            
                
                <link rel="stylesheet" href="../../gitbook/gitbook-plugin-fontsettings/website.css">
                
            
        

    

    
        
    
        
    
        
    
        
    
        
    
        
    

        
    
    
    <meta name="HandheldFriendly" content="true"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="../../gitbook/images/apple-touch-icon-precomposed-152.png">
    <link rel="shortcut icon" href="../../gitbook/images/favicon.ico" type="image/x-icon">

    
    <link rel="next" href="java-basic-io-stream.html" />
    
    
    <link rel="prev" href="java-basic-try-catch-finally.html" />
    

    </head>
    <body>
        
<div class="book">
    <div class="book-summary">
        
            
<div id="book-search-input" role="search">
    <input type="text" placeholder="Type to search" />
</div>

            
                <nav role="navigation">
                


<ul class="summary">
    
    

    

    
        
        
    
        <li class="chapter " data-level="1.1" data-path="../../">
            
                <a href="../../">
            
                    
                    Java
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.1.1" data-path="java-basic-joor.html">
            
                <a href="java-basic-joor.html">
            
                    
                    Java 基础 -- 使用 JOOR 实现反射
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.2" data-path="java-basic-annotation.html">
            
                <a href="java-basic-annotation.html">
            
                    
                    Java基础 -- 注解
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.3" data-path="java-basic-threadlocal.html">
            
                <a href="java-basic-threadlocal.html">
            
                    
                    Java 基础 -- ThreadLocal
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.4" data-path="java-development-skills-get-stacktrace.html">
            
                <a href="java-development-skills-get-stacktrace.html">
            
                    
                    Java 开发技巧 -- 获取 Java 的调用栈
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.5" data-path="java-basic-concurrent-map-collection.html">
            
                <a href="java-basic-concurrent-map-collection.html">
            
                    
                    Java 基础 -- 并发集合的使用
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.6" data-path="java-dynamic-proxy-invocationhandler-demo.html">
            
                <a href="java-dynamic-proxy-invocationhandler-demo.html">
            
                    
                    Java InvocationHandler 实现动态代理
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.7" data-path="java-basic-try-catch-finally.html">
            
                <a href="java-basic-try-catch-finally.html">
            
                    
                    Java 基础 -- 深入理解 try catch finally
            
                </a>
            

            
        </li>
    
        <li class="chapter active" data-level="1.1.8" data-path="java-basic-reflect.html">
            
                <a href="java-basic-reflect.html">
            
                    
                    Java 基础 -- 反射
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.9" data-path="java-basic-io-stream.html">
            
                <a href="java-basic-io-stream.html">
            
                    
                    Java IO -- IO流的概念和分类
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.10" data-path="java-basic-final.html">
            
                <a href="java-basic-final.html">
            
                    
                    Java 基础 -- 深入理解 final 修饰符
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.11" data-path="java-basic-memory-manage-constructor.html">
            
                <a href="java-basic-memory-manage-constructor.html">
            
                    
                    Java 内存管理 -- 父子实例的内存控制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.12" data-path="java-basic-memory-manage-inherit-object.html">
            
                <a href="java-basic-memory-manage-inherit-object.html">
            
                    
                    Java 内存管理 -- 构造方法
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.13" data-path="java-basic-memory-manage-memory-area.html">
            
                <a href="java-basic-memory-manage-memory-area.html">
            
                    
                    Java 内存管理 -- 内存区域的划分
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.14" data-path="java-basic-memory-manage-variable.html">
            
                <a href="java-basic-memory-manage-variable.html">
            
                    
                    Java 内存管理 -- 变量的内存管理
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.15" data-path="java-basic-knowledge-generic.html">
            
                <a href="java-basic-knowledge-generic.html">
            
                    
                    Java 基础 -- 范型
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.16" data-path="java-basic-knowledge-auto-boxing.html">
            
                <a href="java-basic-knowledge-auto-boxing.html">
            
                    
                    Java 基础 -- 关于自动装箱和拆箱机制
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.17" data-path="java-basic-knowledge-parameter-passing.html">
            
                <a href="java-basic-knowledge-parameter-passing.html">
            
                    
                    Java 基础 -- 值传递、引用传递和参数传递
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.18" data-path="java-basic-stringbuilder-stringbuffer.html">
            
                <a href="java-basic-stringbuilder-stringbuffer.html">
            
                    
                    Java 基础 -- StringBuilder 和 StringBuffer
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.19" data-path="java-basic-knowledge-about-string.html">
            
                <a href="java-basic-knowledge-about-string.html">
            
                    
                    Java 基础 -- 深入理解 String
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.1.20" data-path="java-basic-linkedhashmap.html">
            
                <a href="java-basic-linkedhashmap.html">
            
                    
                    Java 基础 -- LinkedHashMap 的使用和原理
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    

    

    <li class="divider"></li>

    <li>
        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
            Published with GitBook
        </a>
    </li>
</ul>


                </nav>
            
        
    </div>

    <div class="book-body">
        
            <div class="body-inner">
                
                    

<div class="book-header" role="navigation">
    

    <!-- Title -->
    <h1>
        <i class="fa fa-circle-o-notch fa-spin"></i>
        <a href="../.." >Java 基础 -- 反射</a>
    </h1>
</div>




                    <div class="page-wrapper" tabindex="-1" role="main">
                        <div class="page-inner">
                            
<div id="book-search-results">
    <div class="search-noresults">
    
                                <section class="normal markdown-section">
                                
                                <hr>
<p>title: Java &#x57FA;&#x7840; -- &#x53CD;&#x5C04;
categories: Java
comments: true
tags: [Java]
description: &#x4ECB;&#x7ECD;&#x53CD;&#x5C04;&#x7684;&#x7528;&#x6CD5;</p>
<h2 id="date-2014-11-2-100000">date: 2014-11-2 10:00:00</h2>
<h2 id="&#x6982;&#x8FF0;">&#x6982;&#x8FF0;</h2>
<p>&#x4EC0;&#x4E48;&#x53EB;&#x53CD;&#x5C04;&#xFF1F;
&#x5728;&#x8FD0;&#x884C;&#x72B6;&#x6001;&#x4E2D;&#xFF0C;&#x5BF9;&#x4E8E;&#x4EFB;&#x610F;&#x4E00;&#x4E2A;&#x7C7B;&#xFF0C;&#x90FD;&#x80FD;&#x591F;&#x77E5;&#x9053;&#x8FD9;&#x4E2A;&#x7C7B;&#x7684;&#x6240;&#x6709;&#x5C5E;&#x6027;&#x548C;&#x65B9;&#x6CD5;&#xFF1B;&#x5BF9;&#x4E8E;&#x4EFB;&#x610F;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#xFF0C;&#x90FD;&#x80FD;&#x591F;&#x8C03;&#x7528;&#x5B83;&#x7684;&#x4EFB;&#x610F;&#x65B9;&#x6CD5;&#x548C;&#x5C5E;&#x6027;&#xFF1B;&#x8FD9;&#x79CD;&#x8FD0;&#x884C;&#x65F6;&#x52A8;&#x6001;&#x83B7;&#x53D6;&#x4FE1;&#x606F;&#x4EE5;&#x53CA;&#x52A8;&#x6001;&#x8C03;&#x7528;&#x5BF9;&#x8C61;&#x65B9;&#x6CD5;&#x7684;&#x529F;&#x80FD;&#x79F0;&#x4E3A; Java &#x8BED;&#x8A00;&#x7684;&#x53CD;&#x5C04;&#x673A;&#x5236;&#x3002;
&#x53CD;&#x5C04;&#x53EF;&#x4EE5;&#x201C;&#x770B;&#x900F;&#x201D;&#x7A0B;&#x5E8F;&#x7684;&#x8FD0;&#x884C;&#x60C5;&#x51B5;&#xFF0C;&#x53EF;&#x4EE5;&#x8BA9;&#x6211;&#x4EEC;&#x5728;&#x8FD0;&#x884C;&#x671F;&#x77E5;&#x6653;&#x4E00;&#x4E2A;&#x7C7B;&#x6216;&#x8005;&#x5B9E;&#x4F8B;&#x7684;&#x8FD0;&#x884C;&#x72B6;&#x51B5;&#xFF0C;&#x53EF;&#x4EE5;&#x52A8;&#x6001;&#x5730;&#x52A0;&#x8F7D;&#x548C;&#x8C03;&#x7528;&#xFF0C;&#x867D;&#x7136;&#x6709;&#x4E00;&#x5B9A;&#x7684;&#x6027;&#x80FD;&#x5FE7;&#x60A3;&#xFF0C;&#x4F46;&#x5B83;&#x5E26;&#x7ED9;&#x6211;&#x4EEC;&#x7684;&#x4FBF;&#x5229;&#x8FDC;&#x8FDC;&#x5927;&#x4E8E;&#x5176;&#x6027;&#x80FD;&#x7F3A;&#x9677;&#x3002;</p>
<p>&#x5B9E;&#x73B0;&#x53CD;&#x5C04;&#x7684;&#x51E0;&#x4E2A;&#x6B65;&#x9AA4;&#xFF1A;</p>
<ul>
<li>&#x83B7;&#x53D6; Class &#x7C7B;</li>
<li>&#x901A;&#x8FC7; Class &#x521B;&#x5EFA;&#x5BF9;&#x8C61;</li>
<li>&#x83B7;&#x53D6;&#x7C7B;&#x4E2D;&#x7684;&#x65B9;&#x6CD5;</li>
<li>&#x83B7;&#x53D6;&#x7C7B;&#x4E2D;&#x7684;&#x5C5E;&#x6027;&#x3001;&#x5C5E;&#x6027;&#x503C;&#x6216;&#x8005;&#x7C7B;&#x578B;</li>
</ul>
<h2 id="&#x53CD;&#x5C04;&#x76F8;&#x5173;&#x7684;&#x7C7B;">&#x53CD;&#x5C04;&#x76F8;&#x5173;&#x7684;&#x7C7B;</h2>
<p>&#x8981;&#x5B9E;&#x73B0;&#x53CD;&#x5C04;&#x673A;&#x5236;&#x4E00;&#x822C;&#x8981;&#x4F7F;&#x7528;&#x4E0B;&#x9762;&#x56DB;&#x4E2A;&#x7C7B;&#xFF1A;</p>
<ul>
<li>Class</li>
<li>Constructor</li>
<li>Method</li>
<li>Field</li>
</ul>
<h3 id="class">Class</h3>
<p>&#x7406;&#x89E3; Class &#x5BF9;&#x8C61;&#xFF1A;
<a href="https://blog.csdn.net/javazejian/article/details/70768369?utm_source=gold_browser_extension" target="_blank">https://blog.csdn.net/javazejian/article/details/70768369?utm_source=gold_browser_extension</a>
<a href="https://www.cnblogs.com/yaoyinglong/p/Class%E5%AF%B9%E8%B1%A1.html" target="_blank">https://www.cnblogs.com/yaoyinglong/p/Class%E5%AF%B9%E8%B1%A1.html</a></p>
<p>Java &#x8BED;&#x8A00;&#x662F;&#x5148;&#x628A; Java &#x6E90;&#x6587;&#x4EF6;&#x7F16;&#x8BD1;&#x6210;&#x540E;&#x7F00;&#x4E3A; class &#x7684;&#x5B57;&#x8282;&#x7801;&#x6587;&#x4EF6;&#xFF0C;&#x7136;&#x540E;&#x518D;&#x901A;&#x8FC7; ClassLoader &#x673A;&#x5236;&#x628A;&#x8FD9;&#x4E9B;&#x7C7B;&#x6587;&#x4EF6;&#x52A0;&#x8F7D;&#x5230;&#x5185;&#x5B58;&#x4E2D;&#xFF0C;&#x6700;&#x540E;&#x751F;&#x6210;&#x5B9E;&#x4F8B;&#x6765;&#x6267;&#x884C;&#x7684;&#xFF0C;&#x8FD9;&#x662F; Java &#x5904;&#x7406;&#x7684;&#x57FA;&#x672C;&#x673A;&#x5236;&#xFF0C;&#x4F46;&#x662F;&#x52A0;&#x8F7D;&#x5230;&#x5185;&#x5B58;&#x4E2D;&#x7684;&#x6570;&#x636E;&#x662F;&#x5982;&#x4F55;&#x63CF;&#x8FF0;&#x4E00;&#x4E2A;&#x7C7B;&#x7684;&#x5462;&#xFF1F;&#x6BD4;&#x5982; Dog.class &#x6587;&#x4EF6;&#x4E2D;&#x5B9A;&#x4E49;&#x7684;&#x662F;&#x4E00;&#x4E2A; Dog &#x7C7B;&#xFF0C;&#x90A3;&#x4E48;&#x5B83;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x662F;&#x5982;&#x4F55;&#x5C55;&#x73B0;&#x7684;&#x5462;&#xFF1F;
Java &#x4F7F;&#x7528;&#x4E00;&#x4E2A;&#x5143;&#x7C7B;&#xFF08;MetaClass&#xFF09;&#x6765;&#x63CF;&#x8FF0;&#x52A0;&#x8F7D;&#x5230;&#x5185;&#x5B58;&#x4E2D;&#x7684;&#x7C7B;&#x6570;&#x636E;&#xFF0C;&#x8FD9;&#x5C31;&#x662F; Class &#x7C7B;&#xFF0C;&#x5B83;&#x662F;&#x4E00;&#x4E2A;&#x63CF;&#x8FF0;&#x7C7B;&#x7684;&#x7C7B;&#x5BF9;&#x8C61;&#xFF0C;&#x6BD4;&#x5982; Dog.classs &#x6587;&#x4EF6;&#x52A0;&#x8F7D;&#x5230;&#x5185;&#x5B58;&#x4E2D;&#x540E;&#x5C31;&#x4F1A;&#x4E00;&#x4E2A;Class &#x7684;&#x5B9E;&#x4F8B;&#x5BF9;&#x8C61;&#x6765;&#x63CF;&#x8FF0;&#x5B83;&#x3002;&#x56E0;&#x4E3A;Class&#x7C7B;&#x662F;&#x201C;&#x7C7B;&#x4E2D;&#x7C7B;&#x201D;&#xFF0C;&#x4E5F;&#x5C31;&#x9884;&#x793A;&#x7740;&#x5B83;&#x6709;&#x5F88;&#x591A;&#x7279;&#x6B8A;&#x7684;&#x5730;&#x65B9;&#xFF1A;</p>
<ul>
<li>&#x65E0;&#x6784;&#x9020;&#x51FD;&#x6570;&#xFF1A;Java &#x4E2D;&#x7684;&#x7C7B;&#x4E00;&#x822C;&#x90FD;&#x6709;&#x6784;&#x9020;&#x51FD;&#x6570;&#xFF0C;&#x7528;&#x4E8E;&#x521B;&#x5EFA;&#x5B9E;&#x4F8B;&#x5BF9;&#x8C61;&#x3002;&#x4F46;&#x662F; Class &#x7C7B;&#x5374;&#x6CA1;&#x6709;&#x6784;&#x9020;&#x51FD;&#x6570;&#xFF0C;&#x4E0D;&#x80FD;&#x5B9E;&#x4F8B;&#x5316;&#xFF0C;Class &#x5BF9;&#x8C61;&#x662F;&#x5728;&#x52A0;&#x8F7D;&#x7C7B;&#x65F6;&#x7531; Java &#x865A;&#x62DF;&#x673A;&#x901A;&#x8FC7;&#x8C03;&#x7528;&#x7C7B;&#x7684;&#x52A0;&#x8F7D;&#x5668;&#x4E2D;&#x7684;defineClass&#x65B9;&#x6CD5;&#x81EA;&#x52A8;&#x6784;&#x9020;&#x7684;&#x3002;</li>
<li>&#x53EF;&#x4EE5;&#x63CF;&#x8FF0;&#x57FA;&#x672C;&#x7C7B;&#x578B;&#xFF1A;&#x867D;&#x7136;8&#x4E2A;&#x57FA;&#x672C;&#x7C7B;&#x578B;&#x5728; JVM &#x4E2D;&#x5E76;&#x4E0D;&#x662F;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#xFF0C;&#x5B83;&#x4EEC;&#x4E00;&#x822C;&#x5B58;&#x5728;&#x4E8E;&#x6808;&#x5185;&#x5B58;&#x4E2D;&#xFF0C;&#x4F46;&#x662F; Class &#x7C7B;&#x4ECD;&#x7136;&#x53EF;&#x4EE5;&#x63CF;&#x8FF0;&#x5B83;&#x4EEC;&#x3002;&#x4F8B;&#x5982;&#xFF1A;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; int.class &#x6807;&#x8BC6;int&#x7C7B;&#x578B;&#x7684;&#x7C7B;&#x5BF9;&#x8C61;&#x3002;</li>
<li>&#x5176;&#x5BF9;&#x8C61;&#x90FD;&#x662F;&#x5355;&#x4F8B;&#x6A21;&#x5F0F;&#xFF1A;&#x4E00;&#x4E2A;Class&#x7684;&#x5B9E;&#x4F8B;&#x5BF9;&#x8C61;&#x63CF;&#x8FF0;&#x4E00;&#x4E2A;&#x7C7B;&#xFF0C;&#x5E76;&#x4E14;&#x53EA;&#x63CF;&#x8FF0;&#x4E00;&#x4E2A;&#x7C7B;&#xFF0C;&#x53CD;&#x8FC7;&#x6765;&#x4E5F;&#x6210;&#x7ACB;&#xFF0C;&#x4E00;&#x4E2A;&#x7C7B;&#x53EA;&#x6709;&#x4E00;&#x4E2A;Class&#x5B9E;&#x4F8B;&#x5BF9;&#x8C61;&#x3002;</li>
</ul>
<p>&#x4E0B;&#x9762;&#x7684;&#x4EE3;&#x7801;&#x90FD;&#x662F;&#x8FD4;&#x56DE;true&#x7684;&#xFF1A;</p>
<pre><code>// &#x7C7B;&#x7684;&#x5C5E;&#x6027;class&#x6240;&#x5F15;&#x7528;&#x7684;&#x5BF9;&#x8C61;&#x4E0E;&#x5B9E;&#x4F8B;&#x5BF9;&#x8C61;&#x7684;getClass&#x8FD4;&#x56DE;&#x503C;&#x76F8;&#x540C;
String.class.equals(new String().class);
&quot;ABC&quot;.getClass.equals(String.class);
// class &#x5B9E;&#x4F8B;&#x5BF9;&#x8C61;&#x4E0D;&#x533A;&#x5206;&#x6CDB;&#x578B;
ArrayList.class.equals(new ArrayList&lt;String&gt;().getClass());
</code></pre><p>Class &#x7C7B;&#x662F; Java &#x53CD;&#x5C04;&#x7684;&#x5165;&#x53E3;&#xFF0C;&#x53EA;&#x6709;&#x5728;&#x83B7;&#x5F97;&#x4E86;&#x4E00;&#x4E2A;&#x7C7B;&#x7684;&#x63CF;&#x8FF0;&#x5BF9;&#x8C61;&#x540E;&#x624D;&#x80FD;&#x52A8;&#x6001;&#x5730;&#x52A0;&#x8F7D;&#x3001;&#x8C03;&#x7528;&#x3002;
&#x4E0B;&#x9762;&#x4ECB;&#x7ECD;&#x4E00;&#x4E0B;&#x83B7;&#x53D6; Class &#x7684;&#x4E09;&#x79CD;&#x65B9;&#x6CD5;&#xFF1A;</p>
<p>&#x7B2C;&#x4E00;&#x79CD;&#x65B9;&#x5F0F;&#xFF1A;&#x901A;&#x8FC7;&#x5BF9;&#x8C61;&#x7684; getClass &#x65B9;&#x6CD5;&#x83B7;&#x53D6;&#xFF1A;</p>
<pre><code>        OuterClass outerClass = new OuterClass();
        Class cls = outerClass.getClass();
</code></pre><p>&#x7B2C;&#x4E8C;&#x79CD;&#x65B9;&#x5F0F;&#xFF1A;&#x76F4;&#x63A5;&#x901A;&#x8FC7;&#x7C7B;&#x540D;&#x83B7;&#x53D6;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x901A;&#x8FC7;&#x7C7B;&#x5C5E;&#x6027;&#x7684;&#x65B9;&#x5F0F;&#xFF1A;</p>
<pre><code>        Class cls = OuterClass.class;
</code></pre><p>&#x7B2C;&#x4E09;&#x79CD;&#x65B9;&#x5F0F;&#xFF1A;&#x901A;&#x8FC7;&#x7C7B;&#x7684;&#x5168;&#x79F0;&#x83B7;&#x53D6;&#xFF0C;&#x4F7F;&#x7528; forName &#x65B9;&#x6CD5;&#x52A0;&#x8F7D;&#xFF1A;</p>
<pre><code>        try {
            Class cls = Class.forName(&quot;com.example.hq.testsomething.OuterClass&quot;);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
</code></pre><p>&#x83B7;&#x5F97;&#x4E86; Class &#x5BF9;&#x8C61;&#x540E;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x4E0B;&#x9762;Class &#x7684;&#x51E0;&#x4E2A;&#x65B9;&#x6CD5;&#x6765;&#x83B7;&#x53D6;&#x6784;&#x9020;&#x65B9;&#x6CD5;&#x3001;&#x5C5E;&#x6027;&#x3001;&#x65B9;&#x6CD5;&#x4EE5;&#x53CA;&#x6CE8;&#x89E3;&#xFF0C;&#x4E3A;&#x540E;&#x7EED;&#x7684;&#x53CD;&#x5C04;&#x4EE3;&#x7801;&#x94FA;&#x5E73;&#x4E86;&#x9053;&#x8DEF;&#xFF1A;</p>
<ul>
<li>getConstructors()/getDeclaredConstructors()&#xFF1A;&#x83B7;&#x53D6;&#x7C7B;&#x4E2D;&#x6240;&#x6709;&#x7684;&#x6784;&#x9020;&#x65B9;&#x6CD5;</li>
<li>getFields()/getDeclaredFields()&#xFF1A;&#x83B7;&#x53D6;&#x7C7B;&#x4E2D;&#x6240;&#x6709;&#x7684;&#x5C5E;&#x6027;</li>
<li>getMethods()/getDeclaredMethods()&#xFF1A;&#x83B7;&#x53D6;&#x7C7B;&#x4E2D;&#x6240;&#x6709;&#x7684;&#x65B9;&#x6CD5;</li>
<li>getAnnotations()/getDeclaredAnnotationsv()&#xFF1A;&#x83B7;&#x53D6;&#x7C7B;&#x6240;&#x6709;&#x7684;&#x6CE8;&#x89E3;</li>
<li>getSuperclass()&#xFF1A;&#x83B7;&#x53D6;&#x76F4;&#x63A5;&#x7EE7;&#x627F;&#x7684;&#x7236;&#x7C7B;</li>
<li>getGenericSuperclass()&#xFF1A;&#x83B7;&#x53D6;&#x76F4;&#x63A5;&#x7EE7;&#x627F;&#x7684;&#x7236;&#x7C7B;&#xFF08;&#x5305;&#x542B;&#x6CDB;&#x578B;&#x53C2;&#x6570;&#xFF09;</li>
</ul>
<h3 id="get-&#x548C;-getdeclared-&#x65B9;&#x6CD5;&#x7684;&#x533A;&#x522B;"><code>get*</code> &#x548C; <code>getDeclared*</code> &#x65B9;&#x6CD5;&#x7684;&#x533A;&#x522B;</h3>
<p>Java Class &#x7C7B;&#x63D0;&#x4F9B;&#x4E86;&#x5F88;&#x591A;&#x7684; <code>get*</code> &#x548C; <code>getDeclared*</code> &#x65B9;&#x6CD5;&#xFF0C;&#x6BD4;&#x5982; getDeclaredMethods() &#x548C; getMethods()&#xFF0C;&#x90A3;&#x4E48;&#x5B83;&#x4EEC;&#x4E4B;&#x95F4;&#x6709;&#x4EC0;&#x4E48;&#x5DEE;&#x522B;&#x5462;&#xFF1F;
getMethods() &#x65B9;&#x6CD5;&#x83B7;&#x53D6;&#x7684;&#x662F;&#x6240;&#x6709;&#x7684; public &#x8BBF;&#x95EE;&#x7EA7;&#x522B;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x5305;&#x62EC;&#x4ECE;&#x7236;&#x7C7B;&#x7EE7;&#x627F;&#x7684;&#x65B9;&#x6CD5;&#x3002;
getDeclaredMethods() &#x65B9;&#x6CD5;&#x83B7;&#x5F97;&#x7684;&#x662F;&#x81EA;&#x8EAB;&#x7C7B;&#x7684;&#x6240;&#x6709;&#x65B9;&#x6CD5;&#xFF0C;&#x5305;&#x62EC;&#x516C;&#x7528;&#x65B9;&#x6CD5;&#x3001;&#x79C1;&#x6709;&#x65B9;&#x6CD5;&#x7B49;&#xFF0C;&#x800C;&#x4E14;&#x4E0D;&#x53D7;&#x9650;&#x4E8E;&#x8BBF;&#x95EE;&#x6743;&#x9650;&#x3002;&#x4F46;&#x4E0D;&#x5305;&#x62EC;&#x7EE7;&#x627F;&#x7684;&#x65B9;&#x6CD5;&#x3002;
getDeclaredField&#xFF08;s&#xFF09;&#x548C;getField&#xFF08;s&#xFF09;&#x540C;&#x4E0A;&#x3002;
Java &#x4E4B;&#x6240;&#x4EE5;&#x5982;&#x6B64;&#x5904;&#x7406;&#xFF0C;&#x662F;&#x56E0;&#x4E3A;&#x53CD;&#x5C04;&#x672C;&#x8EAB;&#x53EA;&#x662F;&#x6B63;&#x5E38;&#x4EE3;&#x7801;&#x903B;&#x8F91;&#x7684;&#x4E00;&#x79CD;&#x8865;&#x5145;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x8BA9;&#x6B63;&#x5E38;&#x4EE3;&#x7801;&#x903B;&#x8F91;&#x4EA7;&#x751F;&#x7FFB;&#x5929;&#x8986;&#x5730;&#x7684;&#x53D8;&#x52A8;&#xFF0C;&#x6240;&#x4EE5;public&#x5F97;&#x5C5E;&#x6027;&#x548C;&#x65B9;&#x6CD5;&#x6700;&#x5BB9;&#x6613;&#x83B7;&#x53D6;&#xFF0C;&#x79C1;&#x6709;&#x5C5E;&#x6027;&#x548C;&#x65B9;&#x6CD5;&#x4E5F;&#x53EF;&#x4EE5;&#x83B7;&#x53D6;&#xFF0C;&#x4F46;&#x8981;&#x5148;&#x5B9A;&#x672C;&#x7C7B;&#x3002;</p>
<h3 id="method">Method</h3>
<p>Method &#x7684;&#x51E0;&#x4E2A;&#x65B9;&#x6CD5;&#xFF1A;</p>
<ul>
<li>getModifiers()&#xFF1A;&#x83B7;&#x53D6;&#x65B9;&#x6CD5;&#x4FEE;&#x9970;&#x7B26;&#xFF0C;&#x6BD4;&#x5982;Modifier.PUBLIC&#x3001;Modifier.STATIC&#x7B49;</li>
<li>getDeclaringClass()&#xFF1A;&#x8FD4;&#x56DE;&#x8868;&#x793A;&#x58F0;&#x660E;&#x7531;&#x6B64;Method&#x5BF9;&#x8C61;&#x8868;&#x793A;&#x7684;&#x65B9;&#x6CD5;&#x7684;&#x7C7B;&#x7684;Class&#x5BF9;&#x8C61;</li>
</ul>
<h3 id="field">Field</h3>
<p>Field &#x7684;&#x51E0;&#x4E2A;&#x65B9;&#x6CD5;&#xFF1A;</p>
<ul>
<li>getDeclaringClass()&#xFF1A;&#x8FD4;&#x56DE;&#x8868;&#x793A;&#x58F0;&#x660E;&#x7531;Field&#x5BF9;&#x8C61;&#x8868;&#x793A;&#x7684;&#x5B57;&#x6BB5;&#x7684;&#x7C7B;&#x6216;&#x63A5;&#x53E3;&#x7684; Class &#x5BF9;&#x8C61;&#x3002;&#x6BD4;&#x5982; mName &#x662F; Student &#x7C7B;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x90A3;&#x4E48;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x5C31;&#x8FD4;&#x56DE; Student &#x5BF9;&#x5E94;&#x7684; Class &#x5BF9;&#x8C61;&#x3002;</li>
<li>getClass()&#xFF1A;&#x8FD4;&#x56DE; Field Class &#x5BF9;&#x8C61;&#x3002;</li>
<li>getType()&#xFF1A;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;Class&#x5BF9;&#x8C61;&#xFF0C;&#x7528;&#x4E8E;&#x6807;&#x8BC6;Field&#x5BF9;&#x8C61;&#x6240;&#x8868;&#x793A;&#x7684;&#x5B57;&#x6BB5;&#x7684;&#x58F0;&#x660E;&#x7C7B;&#x578B;&#x3002;&#x6BD4;&#x5982; mName &#x662F;String &#x7C7B;&#x578B;&#x7684;&#xFF0C;&#x90A3;&#x4E48;&#x5C31;&#x8FD4;&#x56DE; String &#x5BF9;&#x5E94;&#x7684; Class &#x5BF9;&#x8C61;&#x3002;</li>
</ul>
<h2 id="&#x5B9E;&#x4F8B;&#x5316;&#x5BF9;&#x8C61;">&#x5B9E;&#x4F8B;&#x5316;&#x5BF9;&#x8C61;</h2>
<p>&#x5B9E;&#x4F8B;&#x5316;&#x5BF9;&#x8C61;&#x7684;&#x65B9;&#x6CD5;&#xFF1A;</p>
<ul>
<li>Class.newInstance()&#xFF1A;&#x53EA;&#x80FD;&#x591F;&#x8C03;&#x7528;&#x65E0;&#x53C2;&#x7684;&#x6784;&#x9020;&#x51FD;&#x6570;&#xFF0C;&#x5373;&#x9ED8;&#x8BA4;&#x7684;&#x6784;&#x9020;&#x51FD;&#x6570;&#x3002;&#x8981;&#x6C42;&#x88AB;&#x8C03;&#x7528;&#x7684;&#x6784;&#x9020;&#x51FD;&#x6570;&#x662F;&#x53EF;&#x89C1;&#x7684;&#xFF0C;&#x4E5F;&#x5373;&#x5FC5;&#x987B;&#x662F;public&#x7C7B;&#x578B;&#x7684;&#x3002;</li>
<li>Constructor.newInstance()&#xFF1A;&#x53EF;&#x4EE5;&#x6839;&#x636E;&#x4F20;&#x5165;&#x7684;&#x53C2;&#x6570;&#xFF0C;&#x8C03;&#x7528;&#x4EFB;&#x610F;&#x6784;&#x9020;&#x6784;&#x9020;&#x51FD;&#x6570;&#x3002;&#x53EF;&#x4EE5;&#x8C03;&#x7528;&#x79C1;&#x6709;&#x7684;&#x6784;&#x9020;&#x51FD;&#x6570;&#xFF0C;&#x9700;&#x8981;&#x901A;&#x8FC7;setAccessible&#xFF08;true&#xFF09;&#x5B9E;&#x73B0;&#x3002;</li>
</ul>
<p>&#x901A;&#x8FC7; Class.newInstance &#x65B9;&#x6CD5;&#x5B9E;&#x4F8B;&#x5316;&#x5BF9;&#x8C61;&#xFF1A;</p>
<pre><code>        try {
            OuterClass oc = (OuterClass) cls.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
</code></pre><p>&#x901A;&#x8FC7; Constructor.newInstance() &#x65B9;&#x6CD5;&#x5B9E;&#x4F8B;&#x5316;&#x5BF9;&#x8C61;&#xFF1A;</p>
<pre><code>        try {
            Constructor constructor = cls.getDeclaredConstructor(int.class, String.class);
            constructor.setAccessible(true);
            OuterClass oc = (OuterClass) constructor.newInstance(&quot;1&quot;,&quot;test&quot;);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
</code></pre><h2 id="&#x5173;&#x4E8E;-setaccessible">&#x5173;&#x4E8E; setAccessible</h2>
<p>&#x6211;&#x4EEC;&#x5E73;&#x65F6;&#x5728;&#x53CD;&#x5C04;&#x4EE3;&#x7801;&#x65F6;&#xFF0C;&#x5C24;&#x5176;&#x65F6;&#x53CD;&#x5C04;&#x8C03;&#x7528;&#x79C1;&#x6709;&#x7684; Field &#x6216;&#x8005; Method &#x65F6;&#xFF0C;&#x4F1A;&#x8BBE;&#x7F6E; <code>setAccessible(true)</code>&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x8BBE;&#x7F6E;&#xFF0C;&#x5C31;&#x4F1A;&#x629B;&#x51FA;&#x5F02;&#x5E38;&#xFF1A;</p>
<pre><code>java.lang.IllegalAccessException: Class java.lang.Class&lt;com.example.heqiang.testsomething.commontest.OtherTestActivity&gt; cannot access private  field boolean com.example.heqiang.testsomething.reflect.TestA.mTestBoolean of class java.lang.Class&lt;com.example.heqiang.testsomething.reflect.TestA&gt;
</code></pre><p>&#x90A3;&#x4E48;&#x53EF;&#x80FD;&#x5927;&#x5BB6;&#x5C31;&#x4F1A;&#x8BA4;&#x4E3A; Accessible &#x4EE3;&#x8868;&#x7684;&#x662F;&#x8BBF;&#x95EE;&#x6743;&#x9650;&#x7684;&#x63A7;&#x5236;&#x3002;&#x5176;&#x5B9E;&#x5E76;&#x4E0D;&#x662F;&#x8FD9;&#x6837;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x4E00;&#x4E2A;&#x516C;&#x6709;public&#x7684;&#x5C5E;&#x6027;&#x6216;&#x8005;&#x65B9;&#x6CD5;&#xFF0C;&#x4E0D;&#x53BB;&#x8BBE;&#x7F6E; <code>setAccessible(true)</code>&#xFF0C;&#x6B64;&#x65F6;&#x662F;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x6216;&#x8005;&#x6267;&#x884C;&#x7684;&#x3002;&#x4F46;&#x662F;&#x6211;&#x4EEC;&#x6253;&#x5370;&#x4E0B;&#x9762;&#x7684;&#x4EE3;&#x7801;&#xFF1A;</p>
<pre><code>field.isAccessible()
method.isAccessible()
</code></pre><p>&#x53D1;&#x73B0;&#x8FD4;&#x56DE;&#x7684;&#x662F; false&#x3002;
&#x4E3A;&#x4EC0;&#x4E48;&#x8FD4;&#x56DE;&#x4E86; false &#x8FD8;&#x80FD;&#x6267;&#x884C;&#x5462;&#xFF1F;&#x8FD9;&#x4E5F;&#x8BF4;&#x660E;&#xFF0C;&#x5C5E;&#x6027;&#x548C;&#x65B9;&#x6CD5;&#x5BF9;&#x8C61;&#x7684;Accessible&#x5C5E;&#x6027;&#x5E76;&#x4E0D;&#x662F;&#x7528;&#x6765;&#x51B3;&#x5B9A;&#x662F;&#x5426;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x7684;&#x3002;
Accessible &#x5176;&#x5B9E;&#x6307;&#x7684;&#x662F;&#x662F;&#x5426;&#x66F4;&#x5BB9;&#x6613;&#x83B7;&#x5F97;&#xFF0C;&#x662F;&#x5426;&#x8FDB;&#x884C;&#x5B89;&#x5168;&#x68C0;&#x67E5;&#x3002;
&#x6211;&#x4EEC;&#x77E5;&#x9053;&#xFF0C;&#x52A8;&#x6001;&#x4FEE;&#x6539;&#x4E00;&#x4E2A;&#x7C7B;&#x6216;&#x8005;&#x65B9;&#x6CD5;&#x6216;&#x8005;&#x6267;&#x884C;&#x65B9;&#x6CD5;&#x65F6;&#x90FD;&#x4F1A;&#x53D7;&#x5230;Java&#x5B89;&#x5168;&#x4F53;&#x7CFB;&#x7684;&#x5236;&#x7EA6;&#xFF0C;&#x800C;&#x5B89;&#x5168;&#x7684;&#x5904;&#x7406;&#x662F;&#x975E;&#x5E38;&#x6D88;&#x8017;&#x8D44;&#x6E90;&#x7684;&#xFF08;&#x6027;&#x80FD;&#x975E;&#x5E38;&#x4F4E;&#xFF09;&#xFF0C;&#x56E0;&#x6B64;&#x5BF9;&#x4E8E;&#x8FD0;&#x884C;&#x671F;&#x8981;&#x6267;&#x884C;&#x7684;&#x65B9;&#x6CD5;&#x6216;&#x8981;&#x4FEE;&#x6539;&#x7684;&#x5C5E;&#x6027;&#x5C31;&#x63D0;&#x4F9B;&#x4E86; Accessible &#x53EF;&#x9009;&#x9879;&#xFF1A;&#x7531;&#x5F00;&#x53D1;&#x8005;&#x51B3;&#x5B9A;&#x662F;&#x5426;&#x8981;&#x9003;&#x907F;&#x5B89;&#x5168;&#x4F53;&#x7CFB;&#x7684;&#x68C0;&#x67E5;&#x3002;
&#x67E5;&#x770B;&#x6E90;&#x7801;&#xFF0C;&#x6211;&#x4EEC;&#x53D1;&#x73B0; Field &#x3001;Method &#x548C; Constructor &#x90FD;&#x662F;&#x7EE7;&#x627F;&#x81EA; AccessibleObject &#x7684;&#xFF0C;isAccessible() &#x548C; setAccessible &#x90FD;&#x662F; AccessibleObject &#x7684;&#x65B9;&#x6CD5;&#x3002;</p>
<pre><code>public class AccessibleObject implements AnnotatedElement {
    boolean override;

    public void setAccessible(boolean flag) throws SecurityException {
        SecurityManager sm = System.getSecurityManager();
        if (sm != null) sm.checkPermission(ACCESS_PERMISSION);
        setAccessible0(this, flag);
    }

    /* Check that you aren&apos;t exposing java.lang.Class.&lt;init&gt;. */
    private static void setAccessible0(AccessibleObject obj, boolean flag)
        throws SecurityException
    {
        if (obj instanceof Constructor &amp;&amp; flag == true) {
            Constructor&lt;?&gt; c = (Constructor&lt;?&gt;)obj;
            if (c.getDeclaringClass() == Class.class) {
                throw new SecurityException(&quot;Can not make a java.lang.Class&quot; +
                                            &quot; constructor accessible&quot;);
            }
        }
        obj.override = flag;
    }
}
</code></pre><p>&#x8BBE;&#x7F6E; setAccessible &#x5176;&#x5B9E;&#x5C31;&#x662F;&#x8BBE;&#x7F6E; override &#x5C5E;&#x6027;&#x3002;
&#x518D;&#x6765;&#x770B;&#x4E00;&#x4E0B; Method &#x7684; invoke &#x65B9;&#x6CD5;&#xFF1A;</p>
<pre><code>    public Object invoke(Object obj, Object... args)
        throws IllegalAccessException, IllegalArgumentException,
           InvocationTargetException
    {
        if (!override) {
            if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) {
                Class&lt;?&gt; caller = Reflection.getCallerClass(1);

                checkAccess(caller, clazz, obj, modifiers);
            }
        }
        MethodAccessor ma = methodAccessor;             // read volatile
        if (ma == null) {
            ma = acquireMethodAccessor();
        }
        return ma.invoke(obj, args);
}
</code></pre><p>&#x5982;&#x679C; override &#x4E3A; true&#xFF0C;&#x90A3;&#x4E48;&#x5C31;&#x4E0D;&#x9700;&#x8981;&#x6267;&#x884C;&#x5B89;&#x5168;&#x68C0;&#x67E5;&#xFF0C;&#x8FD9;&#x5C31;&#x53EF;&#x4EE5;&#x5927;&#x5E45;&#x5EA6;&#x5730;&#x63D0;&#x5347;&#x4E86;&#x7CFB;&#x7EDF;&#x6027;&#x80FD;&#xFF08;&#x5F53;&#x7136;&#xFF0C;&#x7531;&#x4E8E;&#x53D6;&#x6D88;&#x4E86;&#x5B89;&#x5168;&#x68C0;&#x67E5;&#xFF0C;&#x4E5F;&#x5C31;&#x53EF;&#x4EE5;&#x5141;&#x8BB8;private&#x65B9;&#x6CD5;&#xFF0C;&#x8BBF;&#x95EE;private&#x79C1;&#x6709;&#x5C5E;&#x6027;&#x4E86;&#xFF09;&#x3002;&#x7ECF;&#x8FC7;&#x6709;&#x4EBA;&#x6D4B;&#x8BD5;&#xFF0C;&#x5728;&#x5927;&#x91CF;&#x7684;&#x53CD;&#x5C04;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x8BBE;&#x7F6E; Accessible &#x4E3A;true&#x53EF;&#x4EE5;&#x63D0;&#x5347;&#x6027;&#x80FD; 20 &#x500D;&#x4EE5;&#x4E0A;&#x3002;
&#x56E0;&#x6B64;&#xFF0C;&#x6211;&#x4EEC;&#x5728;&#x8FDB;&#x884C;&#x53CD;&#x5C04;&#x7F16;&#x7A0B;&#x65F6;&#xFF0C;&#x8BBE;&#x7F6E; Accessible &#x4E3A;true&#xFF0C;&#x4E0D;&#x4EC5;&#x4EC5;&#x662F;&#x56E0;&#x4E3A;&#x64CD;&#x4F5C;&#x4E60;&#x60EF;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x8FD9;&#x662F;&#x5728;&#x4E3A;&#x6211;&#x4EEC;&#x7684;&#x7CFB;&#x7EDF;&#x6027;&#x80FD;&#x8003;&#x8651;&#x3002;</p>
<h2 id="&#x662F;&#x5426;&#x9700;&#x8981;&#x592A;&#x5173;&#x6CE8;&#x53CD;&#x5C04;&#x6548;&#x7387;">&#x662F;&#x5426;&#x9700;&#x8981;&#x592A;&#x5173;&#x6CE8;&#x53CD;&#x5C04;&#x6548;&#x7387;</h2>
<p>&#x6211;&#x4EEC;&#x5E73;&#x65F6;&#x7F16;&#x7A0B;&#xFF0C;&#x603B;&#x4F1A;&#x6709;&#x4EBA;&#x7ECF;&#x5E38;&#x8BF4;&#xFF1A;&#x53CD;&#x5C04;&#x7684;&#x6548;&#x7387;&#x662F;&#x975E;&#x5E38;&#x4F4E;&#x7684;&#xFF0C;&#x4E0D;&#x5230;&#x4E07;&#x4E0D;&#x5F97;&#x5DF2;&#x5C31;&#x4E0D;&#x8981;&#x4F7F;&#x7528;&#x3002;&#x4E8B;&#x5B9E;&#x4E0A;&#xFF0C;&#x8FD9;&#x53E5;&#x8BDD;&#x7684;&#x524D;&#x534A;&#x53E5;&#x662F;&#x5BF9;&#x7684;&#xFF0C;&#x540E;&#x534A;&#x53E5;&#x662F;&#x9519;&#x7684;&#x3002;
&#x53CD;&#x5C04;&#x7684;&#x6548;&#x7387;&#x76F8;&#x5BF9;&#x4E8E;&#x6B63;&#x5E38;&#x7684;&#x4EE3;&#x7801;&#x6267;&#x884C;&#x786E;&#x5B9E;&#x6548;&#x7387;&#x4F4E;&#x5F88;&#x591A;&#xFF08;&#x6709;&#x4EBA;&#x7ECF;&#x8FC7;&#x6D4B;&#x8BD5;&#xFF0C;&#x76F8;&#x5DEE;15&#x500D;&#x5DE6;&#x53F3;&#xFF09;&#xFF0C;&#x4F46;&#x5B83;&#x662F;&#x4E00;&#x4E2A;&#x975E;&#x5E38;&#x6709;&#x6548;&#x7684;&#x8FD0;&#x884C;&#x671F;&#x5DE5;&#x5177;&#x7C7B;&#xFF0C;&#x53EA;&#x8981;&#x4EE3;&#x7801;&#x7ED3;&#x6784;&#x6E05;&#x6670;&#x3001;&#x53EF;&#x8BFB;&#x6027;&#x597D;&#x90A3;&#x5C31;&#x5148;&#x5F00;&#x53D1;&#x8D77;&#x6765;&#xFF0C;&#x7B49;&#x5230;&#x6027;&#x80FD;&#x6D4B;&#x8BD5;&#x65F6;&#x8BC1;&#x660E;&#x6B64;&#x5904;&#x6027;&#x80FD;&#x786E;&#x5B9E;&#x6709;&#x95EE;&#x9898;&#x518D;&#x4FEE;&#x6539;&#x4E5F;&#x4E0D;&#x8FDF;&#xFF08;&#x4E00;&#x822C;&#x60C5;&#x51B5;&#x4E0B;&#x53CD;&#x5C04;&#x5E76;&#x4E0D;&#x662F;&#x6027;&#x80FD;&#x7684;&#x7EC8;&#x6781;&#x6740;&#x624B;&#xFF0C;&#x800C;&#x4EE3;&#x7801;&#x7ED3;&#x6784;&#x6DF7;&#x4E71;&#x3001;&#x53EF;&#x8BFB;&#x6027;&#x5DEE;&#x5219;&#x5F88;&#x53EF;&#x80FD;&#x57CB;&#x4E0B;&#x6027;&#x80FD;&#x9690;&#x60A3;&#xFF09;&#x3002;&#x5F88;&#x5C11;&#x6709;&#x9879;&#x76EE;&#x662F;&#x56E0;&#x4E3A;&#x53CD;&#x5C04;&#x95EE;&#x9898;&#x5F15;&#x8D77;&#x7CFB;&#x7EDF;&#x6548;&#x7387;&#x6545;&#x969C;&#x7684;&#x3002;&#x800C;&#x6839;&#x636E;&#x4E8C;&#x516B;&#x539F;&#x5219;&#xFF0C;80%&#x7684;&#x6027;&#x80FD;&#x6D88;&#x8017;&#x5728;20%&#x7684;&#x4EE3;&#x7801;&#x4E0A;&#xFF0C;&#x8FD9;20%&#x7684;&#x4EE3;&#x7801;&#x624D;&#x662F;&#x6211;&#x4EEC;&#x5173;&#x6CE8;&#x7684;&#x91CD;&#x70B9;&#xFF0C;&#x4E0D;&#x8981;&#x5355;&#x5355;&#x628A;&#x53CD;&#x5C04;&#x4F5C;&#x4E3A;&#x91CD;&#x70B9;&#x5173;&#x6CE8;&#x5BF9;&#x8C61;&#x3002;</p>
<h2 id="&#x53CD;&#x5C04;&#x548C;private&#x5C5E;&#x6027;">&#x53CD;&#x5C04;&#x548C;private&#x5C5E;&#x6027;</h2>
<p>&#x6211;&#x4EEC;&#x7ECF;&#x5E38;&#x4F1A;&#x88AB;&#x95EE;&#x5230;&#x8FD9;&#x6837;&#x7684;&#x95EE;&#x9898;&#xFF1A;&#x6211;&#x4EEC;&#x901A;&#x8FC7;&#x53CD;&#x5C04;&#x6076;&#x610F;&#x8BBF;&#x95EE;private&#x6210;&#x5458;&#x548C;&#x65B9;&#x6CD5;&#xFF0C;&#x65E2;&#x7136;&#x80FD;&#x8BBF;&#x95EE;&#x4E3A;&#x4EC0;&#x4E48;&#x8981;private&#xFF0C;&#x5B83;&#x7684;&#x4F7F;&#x7528;&#x610F;&#x4E49;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;
&#x9996;&#x5148;&#xFF0C;private&#x7684;&#x5C5E;&#x6027;&#x548C;&#x65B9;&#x6CD5;&#x662F;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x53CD;&#x5C04;&#x6765;&#x8BBF;&#x95EE;&#x7684;&#x3002;private &#x5E76;&#x4E0D;&#x662F;&#x6765;&#x89E3;&#x51B3;&#x5B89;&#x5168;&#x95EE;&#x9898;&#x7684;&#xFF0C;&#x5B83;&#x53EA;&#x662F;OOP&#xFF08;&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x7F16;&#x7A0B;&#xFF09;&#x7684;&#x5C01;&#x88C5;&#x6982;&#x5FF5;&#xFF0C;&#x60F3;&#x505A;&#x5230;&#x7684;&#x662F;&#x4E0D;&#x66B4;&#x9732;&#x5185;&#x90E8;&#x7684;&#x5B9E;&#x73B0;&#x3002;&#x5982;&#x679C;&#x4F60;&#x60F3;&#x89E3;&#x51B3;&#x5B89;&#x5168;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x5C31;&#x8981;&#x60F3;&#x60F3;&#x522B;&#x7684;&#x529E;&#x6CD5;&#x4E86;&#x3002;
&#x5982;&#x679C;&#x5728;&#x7279;&#x6B8A;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x4F60;&#x9700;&#x8981;&#x5173;&#x6CE8;&#x751A;&#x81F3;&#x4FEE;&#x6539;&#x5185;&#x90E8;&#x5B9E;&#x73B0;&#xFF08;&#x53CD;&#x5C04;&#xFF09;&#xFF0C;&#x8FD9;&#x79CD;&#x4F8B;&#x5916;&#x7684;&#x5B58;&#x5728;&#x5E76;&#x4E0D;&#x5F71;&#x54CD;&#x5C01;&#x88C5;&#x7684;&#x7406;&#x5FF5;&#x3002;&#x8FD9;&#x66F4;&#x591A;&#x7684;&#x662F;&#x4E00;&#x79CD;&#x201C;&#x77E5;&#x9053;&#x8FD9;&#x4E48;&#x591A;&#x5C31;&#x591F;&#x4E86;&#x201D;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x201C;&#x8FD9;&#x662F;&#x673A;&#x5BC6;&#xFF0C;&#x575A;&#x51B3;&#x4E0D;&#x80FD;&#x8BA9;&#x5916;&#x4EBA;&#x77E5;&#x9053;&#x201D;&#x3002;
setAccessible&#x4E5F;&#x662F;&#x4E00;&#x79CD;hack&#xFF0C;&#x5B83;&#x53EF;&#x4EE5;&#x53D6;&#x6D88;&#x5B89;&#x5168;&#x68C0;&#x67E5;&#xFF0C;&#x5B83;&#x7684;&#x610F;&#x4E49;&#x662F;&#xFF1A;&#x4F60;&#x6E05;&#x695A;&#x5185;&#x90E8;&#x5B9E;&#x73B0;&#xFF0C;&#x4F60;&#x77E5;&#x9053;&#x4F60;&#x5728;&#x505A;&#x4EC0;&#x4E48;&#xFF0C;&#x76F8;&#x4FE1;&#x4F60;&#x4E0D;&#x4F1A;&#x641E;&#x7838;&#x3002;</p>
<h2 id="&#x53CD;&#x5C04;&#x548C;final&#x5C5E;&#x6027;">&#x53CD;&#x5C04;&#x548C;final&#x5C5E;&#x6027;</h2>
<p>&#x5173;&#x4E8E;&#x53CD;&#x5C04;&#x4FEE;&#x6539;final&#x53D8;&#x91CF;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x7F51;&#x4E0A;&#x6709;&#x6587;&#x7AE0;&#x8BF4;&#x4E0D;&#x80FD;&#x6309;&#x7167;&#x4FEE;&#x6539;&#x666E;&#x901A;&#x53D8;&#x91CF;&#x7684;&#x65B9;&#x5F0F;&#x6765;&#x4FEE;&#x6539;&#xFF0C;&#x8981;&#x4FEE;&#x6539; Filed &#x7684; modifiers &#x5C5E;&#x6027;&#xFF0C;&#x628A;final&#x5C5E;&#x6027;&#x53BB;&#x6389;&#x540E;&#x624D;&#x80FD;&#x4FEE;&#x6539;&#xFF0C;&#x5BF9;&#x6B64;&#x6211;&#x505A;&#x8FC7;&#x6D4B;&#x8BD5;&#xFF0C;&#x4E0D;&#x4FEE;&#x6539; modifiers &#x5C5E;&#x6027;&#x4E5F;&#x662F;&#x53EF;&#x4EE5;&#x5BF9;final&#x53D8;&#x91CF;&#x8FDB;&#x884C;&#x4FEE;&#x6539;&#x7684;&#xFF0C;&#x4F46;&#x662F;&#x548C;&#x666E;&#x901A;&#x7684;&#x53D8;&#x91CF;&#x4FEE;&#x6539;&#x4E5F;&#x6709;&#x533A;&#x522B;&#xFF1A;&#x5C31;&#x662F;&#x4E0D;&#x7BA1;final&#x662F;&#x4E0D;&#x662F;public&#x7684;&#x90FD;&#x8981;&#x8C03;&#x7528; <code>setAccessible(true)</code>&#xFF0C;&#x5426;&#x5219;&#x8FD8;&#x662F;&#x62A5;&#x9519;&#x3002;
&#x6211;&#x662F;&#x5728; Android &#x5E73;&#x53F0;&#x4E0A;&#x6D4B;&#x8BD5;&#x7684;&#xFF0C;&#x53EF;&#x80FD;&#x662F;&#x5E95;&#x5C42;&#x865A;&#x62DF;&#x673A;&#x7684;&#x5DEE;&#x5F02;&#x5BFC;&#x81F4;&#x7684;&#xFF0C;&#x5148;&#x8BB0;&#x5F55;&#x4E8E;&#x6B64;&#xFF0C;&#x540E;&#x9762;&#x6709;&#x65F6;&#x95F4;&#x518D;&#x8BE6;&#x7EC6;&#x4E86;&#x89E3;&#x3002;</p>
<h2 id="&#x53CD;&#x5C04;&#x5B9E;&#x73B0;&#x4EE3;&#x7801;">&#x53CD;&#x5C04;&#x5B9E;&#x73B0;&#x4EE3;&#x7801;</h2>
<h3 id="&#x6D4B;&#x8BD5;&#x7C7B;">&#x6D4B;&#x8BD5;&#x7C7B;</h3>
<p>TestA</p>
<pre><code>public class TestA {
    private TestB mTestB;
    private boolean mTestBoolean = false;
    public TestA(){
        mTestB = new TestB();
    }

    public void getTestBoolean(){
        Log.e(&quot;Test&quot;,&quot;mTestBoolean = &quot;+mTestBoolean);
    }

    private void testPrivateMethod(){
        Log.e(&quot;Test&quot;,&quot;testPrivateMethod!&quot;);
    }

    private String testPrivateMethodWithArgs(String arg1,int arg2){
        Log.e(&quot;Test&quot;,&quot;testPrivateMethodWithArgs! arg1 = &quot;+arg1+&quot;,arg2 = &quot;+arg2);
        return &quot;return &quot;+arg1;
    }
}
</code></pre><p>TestB</p>
<pre><code>public class TestB {
    public TestB(){

    }

    private void functionA(){
        Log.e(&quot;Test&quot;,&quot;functionA()&quot;);
    }
}
</code></pre><p>OutterClass</p>
<pre><code>public class OuterClass {
    private InnerClass mInnerClass;
    public OuterClass(){
        mInnerClass = new InnerClass();
        mInnerClass.printInt();
    }

    private class InnerClass{
        private int mInt = 1;
        private String mStr = &quot;Test&quot;;
        public void printInt(){
            Log.d(&quot;Test&quot;,&quot;mInt = &quot;+mInt);
        }
    }
}
</code></pre><h3 id="&#x83B7;&#x53D6;&#x5C5E;&#x6027;&#x503C;">&#x83B7;&#x53D6;&#x5C5E;&#x6027;&#x503C;</h3>
<pre><code>    public void getFiled(){
        TestA a = new TestA();

        try {
            //&#x6216;&#x8005;a.getClass().getDeclaredField(&quot;mTestBoolean&quot;);
            Field field = TestA.class.getDeclaredField(&quot;mTestBoolean&quot;);
            field.setAccessible(true);
            Object value = field.get(a);
            if(value != null &amp;&amp; value instanceof Boolean){
                Log.e(&quot;Test&quot;,&quot; value = &quot;+value);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void getFiled1(){
        TestA a = new TestA();

        try {
            Class classObj = Class.forName(&quot;com.example.heqiang.testsomething.TestA&quot;);
            Field field = classObj.getDeclaredField(&quot;mTestBoolean&quot;);
            field.setAccessible(true);
            Object value = field.get(a);
            if(value != null &amp;&amp; value instanceof Boolean){
                Log.e(&quot;Test&quot;,&quot; value = &quot;+value);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
</code></pre><h3 id="&#x4FEE;&#x6539;&#x5C5E;&#x6027;&#x503C;">&#x4FEE;&#x6539;&#x5C5E;&#x6027;&#x503C;</h3>
<pre><code>    public void setField(){
        TestA a = new TestA();
        a.getTestBoolean();

        try {
            Field field = TestA.class.getDeclaredField(&quot;mTestBoolean&quot;);
            field.setAccessible(true);
            field.set(a,true);
        } catch (Exception e) {
            e.printStackTrace();
        }

        a.getTestBoolean();
    }
</code></pre><h3 id="&#x8C03;&#x7528;&#x65B9;&#x6CD5;">&#x8C03;&#x7528;&#x65B9;&#x6CD5;</h3>
<pre><code>    public void invokeMethod(){
        TestA a = new TestA();
        try {
            Method method = TestA.class.getDeclaredMethod(&quot;testPrivateMethod&quot;);
            method.setAccessible(true);
            method.invoke(a);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
</code></pre><h3 id="&#x8C03;&#x7528;&#x5E26;&#x53C2;&#x6570;&#x65B9;&#x6CD5;&#x5E76;&#x83B7;&#x53D6;&#x8FD4;&#x56DE;&#x503C;">&#x8C03;&#x7528;&#x5E26;&#x53C2;&#x6570;&#x65B9;&#x6CD5;&#x5E76;&#x83B7;&#x53D6;&#x8FD4;&#x56DE;&#x503C;</h3>
<pre><code>    public void invokeMethodWithArgs(){
        TestA a = new TestA();
        Object result = null;
        try {
            Method method = TestA.class.getDeclaredMethod(&quot;testPrivateMethodWithArgs&quot;,String.class,int class);
            method.setAccessible(true);
            result = method.invoke(a,&quot;Test&quot;,1);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if(result != null &amp;&amp; result instanceof String){
            Log.e(&quot;Test&quot;,&quot; result = &quot;+result);
        }
    }
</code></pre><h3 id="&#x8C03;&#x7528;&#x79C1;&#x6709;&#x5C5E;&#x6027;&#x7684;&#x65B9;&#x6CD5;">&#x8C03;&#x7528;&#x79C1;&#x6709;&#x5C5E;&#x6027;&#x7684;&#x65B9;&#x6CD5;</h3>
<pre><code>    public void invokePirvateFieldMethod(){
        TestA a = new TestA();
        Method functionA = null;
        try {
            Field field = TestA.class.getDeclaredField(&quot;mTestB&quot;);
            field.setAccessible(true);
            Object testB = field.get(a);
            if(testB != null){
                Class testBClass = testB.getClass();
                functionA = testBClass.getDeclaredMethod(&quot;functionA&quot;);
                functionA.setAccessible(true);
                if(functionA != null){
                    functionA.invoke(testB);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
</code></pre><h3 id="&#x5185;&#x90E8;&#x7C7B;">&#x5185;&#x90E8;&#x7C7B;</h3>
<pre><code>    public void testReflectInnerClass(){
        OuterClass outerClass = new OuterClass();
        try{
            Field outerInnerClassFiled =Class.forName(&quot;com.example.heqiang.testsomething.OuterClass&quot;).getDeclaredField(&quot;mInnerClass&quot;);
            outerInnerClassFiled.setAccessible(true);
            Class innerClass = Class.forName(&quot;com.example.heqiang.testsomething.OuterClass$InnerClass&quot;);
            Object outerInnerClassObject = outerInnerClassFiled.get(outerClass);
            if (outerInnerClassObject.getClass().getName().equals(innerClass.getName())){
                Field innerIntFiled =innerClass.getDeclaredField(&quot;mInt&quot;);
                innerIntFiled.setAccessible(true);
                Field innerStrFiled =innerClass.getDeclaredField(&quot;mStr&quot;);
                innerStrFiled.setAccessible(true);
                Method innerFucMethod =innerClass.getDeclaredMethod(&quot;printInt&quot;);
                innerFucMethod.setAccessible(true);

                innerFucMethod.invoke(outerInnerClassObject);
                innerIntFiled.set(outerInnerClassObject, 8);
                innerFucMethod.invoke(outerInnerClassObject);

                Object innerStrObject = innerStrFiled.get(outerInnerClassObject);
                Log.e(&quot;Test&quot;,&quot;mStr length = &quot;+((String)innerStrObject).length());
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
</code></pre><h3 id="&#x83B7;&#x53D6;&#x65B9;&#x6CD5;&#x7684;&#x7C7B;&#x578B;&#x548C;&#x53C2;&#x6570;">&#x83B7;&#x53D6;&#x65B9;&#x6CD5;&#x7684;&#x7C7B;&#x578B;&#x548C;&#x53C2;&#x6570;</h3>
<pre><code>public class ReflectTest {
    public static void testFunc(String grg0,int arg1){

    }

    public final int testFunc1(){
        return 0;
    }
}
</code></pre><pre><code>    public void testRefect(){
        Method[] methods = ReflectTest.class.getMethods();
        for (Method method : methods) {
            Log.d(&quot;Test&quot;,&quot;----------------------&gt;&quot;);
            String methodName = method.getName();
            Log.d(&quot;Test&quot;,&quot;methodName = &quot;+methodName);
            int modifiers = method.getModifiers();
            if((modifiers &amp; Modifier.PUBLIC) != 0)
                Log.d(&quot;Test&quot;,&quot;public&quot;);
            if((modifiers &amp; Modifier.PRIVATE) != 0)
                Log.d(&quot;Test&quot;,&quot;private&quot;);
            if((modifiers &amp; Modifier.STATIC) != 0)
                Log.d(&quot;Test&quot;,&quot;static&quot;);
            if((modifiers &amp; Modifier.FINAL) != 0)
                Log.d(&quot;Test&quot;,&quot;final&quot;);
            Class&lt;?&gt;[] parameterTypes = method.getParameterTypes();
            Log.d(&quot;Test&quot;,&quot;parameter num = &quot;+parameterTypes.length);
            for(Class c : parameterTypes){
                Log.d(&quot;Test&quot;,&quot;parameter name = &quot;+c.getName());
            }
            Log.d(&quot;Test&quot;,&quot;&lt;----------------------&gt;&quot;);
        }
    }
</code></pre><p>&#x7ED3;&#x679C;&#xFF1A;</p>
<pre><code>D/Test    (23196): ----------------------&gt;
D/Test    (23196): methodName = equals
D/Test    (23196): public
D/Test    (23196): parameter num = 1
D/Test    (23196): parameter name = java.lang.Object
D/Test    (23196): &lt;----------------------&gt;
D/Test    (23196): ----------------------&gt;
D/Test    (23196): methodName = getClass
D/Test    (23196): public
D/Test    (23196): final
D/Test    (23196): parameter num = 0
D/Test    (23196): &lt;----------------------&gt;
D/Test    (23196): ----------------------&gt;
D/Test    (23196): methodName = hashCode
D/Test    (23196): public
D/Test    (23196): parameter num = 0
D/Test    (23196): &lt;----------------------&gt;
D/Test    (23196): ----------------------&gt;
D/Test    (23196): methodName = notify
D/Test    (23196): public
D/Test    (23196): final
D/Test    (23196): parameter num = 0
D/Test    (23196): &lt;----------------------&gt;
D/Test    (23196): ----------------------&gt;
D/Test    (23196): methodName = notifyAll
D/Test    (23196): public
D/Test    (23196): final
D/Test    (23196): parameter num = 0
D/Test    (23196): &lt;----------------------&gt;
D/Test    (23196): ----------------------&gt;
D/Test    (23196): methodName = testFunc
D/Test    (23196): public
D/Test    (23196): static
D/Test    (23196): parameter num = 2
D/Test    (23196): parameter name = java.lang.String
D/Test    (23196): parameter name = int
D/Test    (23196): &lt;----------------------&gt;
D/Test    (23196): ----------------------&gt;
D/Test    (23196): methodName = testFunc1
D/Test    (23196): public
D/Test    (23196): final
D/Test    (23196): parameter num = 0
D/Test    (23196): &lt;----------------------&gt;
D/Test    (23196): ----------------------&gt;
D/Test    (23196): methodName = toString
D/Test    (23196): public
D/Test    (23196): parameter num = 0
D/Test    (23196): &lt;----------------------&gt;
D/Test    (23196): ----------------------&gt;
D/Test    (23196): methodName = wait
D/Test    (23196): public
D/Test    (23196): final
D/Test    (23196): parameter num = 0
D/Test    (23196): &lt;----------------------&gt;
D/Test    (23196): ----------------------&gt;
D/Test    (23196): methodName = wait
D/Test    (23196): public
D/Test    (23196): final
D/Test    (23196): parameter num = 1
D/Test    (23196): parameter name = long
D/Test    (23196): &lt;----------------------&gt;
D/Test    (23196): ----------------------&gt;
D/Test    (23196): methodName = wait
D/Test    (23196): public
D/Test    (23196): final
D/Test    (23196): parameter num = 2
D/Test    (23196): parameter name = long
D/Test    (23196): parameter name = int
D/Test    (23196): &lt;----------------------&gt;
</code></pre>
                                
                                </section>
                            
    </div>
    <div class="search-results">
        <div class="has-results">
            
            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
            <ul class="search-results-list"></ul>
            
        </div>
        <div class="no-results">
            
            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
            
        </div>
    </div>
</div>

                        </div>
                    </div>
                
            </div>

            
                
                <a href="java-basic-try-catch-finally.html" class="navigation navigation-prev " aria-label="Previous page: Java 基础 -- 深入理解 try catch finally">
                    <i class="fa fa-angle-left"></i>
                </a>
                
                
                <a href="java-basic-io-stream.html" class="navigation navigation-next " aria-label="Next page: Java IO -- IO流的概念和分类">
                    <i class="fa fa-angle-right"></i>
                </a>
                
            
        
    </div>

    <script>
        var gitbook = gitbook || [];
        gitbook.push(function() {
            gitbook.page.hasChanged({"page":{"title":"Java 基础 -- 反射","level":"1.1.8","depth":2,"next":{"title":"Java IO -- IO流的概念和分类","level":"1.1.9","depth":2,"path":"source/Java/java-basic-io-stream.md","ref":"source/Java/java-basic-io-stream.md","articles":[]},"previous":{"title":"Java 基础 -- 深入理解 try catch finally","level":"1.1.7","depth":2,"path":"source/Java/java-basic-try-catch-finally.md","ref":"source/Java/java-basic-try-catch-finally.md","articles":[]},"dir":"ltr"},"config":{"plugins":["expandable-chapters","livereload"],"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"expandable-chapters":{},"livereload":{},"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"寒江蓑笠的博客","gitbook":"*"},"file":{"path":"source/Java/java-basic-reflect.md","mtime":"2022-05-17T10:49:59.389Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-17T10:54:58.084Z"},"basePath":"../..","book":{"language":""}});
        });
    </script>
</div>

        
    <script src="../../gitbook/gitbook.js"></script>
    <script src="../../gitbook/theme.js"></script>
    
        
        <script src="../../gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-livereload/plugin.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-search/search-engine.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-search/search.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-sharing/buttons.js"></script>
        
    
        
        <script src="../../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
        
    

    </body>
</html>

